package com.firewolf.solr.s05_highlight;

import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.junit.Before;
import org.junit.Test;

/**
 * 语法高亮，搜索词高亮显示
 * @author liuxing
 *
 */
public class Highlight {

	private HttpSolrClient client = null;

	@Before
	public void init() {
		// 获取solr连接，mycore1是集合名
		client = new HttpSolrClient("http://localhost:8081/solr");
		System.out.println(client);
	}

	@Test
	public void hightline() throws Exception {
		SolrQuery solrQuery = new SolrQuery();
		solrQuery.setQuery("name:" + "童装" + "OR category_s:" + "电子"); // 设置查询关键字
		solrQuery.setHighlight(true); // 开启高亮
		solrQuery.addHighlightField("name"); // 高亮字段
		solrQuery.addHighlightField("category_s"); // 高亮字段
		solrQuery.setHighlightSimplePre("<font color='red'>"); // 高亮单词的前缀
		solrQuery.setHighlightSimplePost("</font>"); // 高亮单词的后缀
		/**
		 * hl.snippets
		 * hl.snippets参数是返回高亮摘要的段数，因为我们的文本一般都比较长，含有搜索关键字的地方有多处，如果hl.snippets的值大于1的话，
		 * 会返回多个摘要信息，即文本中含有关键字的几段话，默认值为1，返回含关键字最多的一段描述。solr会对多个段进行排序。
		 * hl.fragsize
		 * hl.fragsize参数是摘要信息的长度。默认值是100，这个长度是出现关键字的位置向前移6个字符，再往后100个字符，取这一段文本。
		 */
		solrQuery.setHighlightSnippets(1);
		solrQuery.setHighlightFragsize(100);
		QueryResponse query = client.query("mycore3",solrQuery);
		// System.out.println(query.getResponse().get("highlighting"));
		Map<String, Map<String, List<String>>> highlightresult = query.getHighlighting();
		System.out.println(highlightresult);
	}

}
